package probadores;

import java.util.List;


import modelo.red.Atributo;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import proceso.carga.malla.LectorMallaSurfer;


public class ProbadorLectorDeMalla {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		boolean lectura;
		List<Atributo> listaAtributo;
		Atributo atributo;
		LectorMallaSurfer lector = new LectorMallaSurfer();
		lector.setArchivoDeEntrada("ROCA-R.grd");
		
		lector.setNombreMalla("Mapa de techo de roca Valle de Quibor");
		//
		// Lectura de archivo de cota terreno
		

		
		Configuration config = new Configuration();
		config.configure("hibernate.cfg.xml");
		SessionFactory sesFact = config.buildSessionFactory();
		Session sess = sesFact.openSession();
		org.hibernate.Transaction tx = sess.beginTransaction();
		Query q;
		q = sess.createQuery("from Atributo as a where a.nombre like 'Techo de Roca' ");
		listaAtributo = q.list();
		if(listaAtributo.size()==0){
			atributo = new Atributo();
			atributo.setNombre("Techo de Roca");
			sess.save(atributo);
		}
		else{
			atributo = listaAtributo.get(0);
		}
		lector.setAtributo(atributo);
		
		lectura = lector.leerArchivo();
		if(lectura) {

			lector.getMalla().getListaAtributo().get(0).setAtributo(atributo);
			sess.save(lector.getMalla().getListaAtributo().get(0));
			
			System.out.println("Termino el programa. Tamano de la lista de puntos no nulos " + lector.getMalla().getListaPunto().size() );
			
			int cantidad = 0;
			sess.save(lector.getMalla());
			
			for(int i = 0; i<lector.getMalla().getEjeNorteSur().size();i++) {
				sess.save(lector.getMalla().getEjeNorteSur().get(i));
			}
			
			for(int i = 0; i<lector.getMalla().getEjeEsteOeste().size();i++) {
				sess.save(lector.getMalla().getEjeEsteOeste().get(i));
			}
			
			sess.flush();
			sess.clear();
			
			for(int i =0; i< lector.getMalla().getListaPunto().size(); i++ ) {
				sess.save(lector.getMalla().getListaPunto().get(i));
				cantidad++;
				if(cantidad == 20000) {
					cantidad = 0;
					sess.flush();
					sess.clear();
					System.out.println("Almacenado el registro " + i);
				}
			}
			sess.flush();
			System.out.println("Almacenados los ultimos registros");
			tx.commit();
		
		}
		else{
			System.out.println("No se leyo el archivo por "+ lector.getRazon());
		}
		sess.close();
		
	}

}
